package com.ruoyi.system.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.system.domain.BdmOrder;
import com.ruoyi.system.domain.dto.BdmMemberRuleDto;
import com.ruoyi.system.domain.dto.BdmOrderDto;
import com.ruoyi.system.domain.dto.MineOrderDto;
import com.ruoyi.system.domain.vo.BdmOrderVo;
import com.ruoyi.system.domain.vo.UserOrderStatusCountVo;
import com.ruoyi.system.domain.vo.applet.AppletBdmOrderItemVo;
import com.ruoyi.system.domain.vo.applet.AppletBdmOrderVo;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 订单Mapper接口
 *
 * @author ruoyi
 * @date 2024-12-13
 */
public interface BdmOrderMapper  extends BaseMapper<BdmOrder>
{
    /**
     * 查询订单
     *
     * @param id 订单主键
     * @return 订单
     */
    public BdmOrder selectBdmOrderById(String id);

    /**
     * 查询订单列表
     *
     * @param bdmOrder 订单
     * @return 订单集合
     */
    public List<BdmOrder> selectBdmOrderList(BdmOrder bdmOrder);

    /**
     * 小程序订单列表
     * @param mineOrderDto
     * @return
     */
    List<BdmOrder> selectAppletOrderList(MineOrderDto mineOrderDto);

    /**
     * 新增订单
     *
     * @param bdmOrder 订单
     * @return 结果
     */
    public int insertBdmOrder(BdmOrder bdmOrder);

    /**
     * 修改订单
     *
     * @param bdmOrder 订单
     * @return 结果
     */
    public int updateBdmOrder(BdmOrder bdmOrder);

    /**
     * 删除订单
     *
     * @param id 订单主键
     * @return 结果
     */
    public int deleteBdmOrderById(String id);

    /**
     * 批量删除订单
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteBdmOrderByIds(String[] ids);

    /**
     * 查询订单列表
     * @param dto
     * @return
     */
    List<BdmOrderVo> selectPageOrder(@Param("dto") BdmOrderDto dto);

    /**
     * 销售数据
     * @param dto
     * @return
     */
    Map<String, Integer> countMarketData(@Param("dto") BdmMemberRuleDto dto);

    /**
     * 销售数据成交订单时间列表
     * @return
     */
    List<Map<String, String>> selectMarketOrderData(@Param("dto")BdmMemberRuleDto dto);

    /**
     * 数据概况 用户数 订单数 商品数 统计
     * @param dto
     * @return
     */
    List<Map<String, String>> selectUserNumberAndOrderNumberProductNumber(@Param("dto") BdmMemberRuleDto dto);

    /**
     * 商品销售额top前十
     * @return
     */
    List<Map<String, String>> marketProductTop();

    /**
     * 用户支付金额top前十
     * @return
     */
    List<Map<String, String>> userPayMoneyTop();

    /**
     * 总裁驾驶窗首页数据
     * @return
     */
    List<Map<String, String>> bossData();


    List<AppletBdmOrderVo> listByUser(@Param("bdmOrderDto")BdmOrderDto bdmOrderDto);

    /**
     *  修改未支付超时的订单为已关闭
     */
    void closeOrder(@Param("timeOut")Long timeOut);


    List<AppletBdmOrderItemVo> orderDetails(@Param("orderId") String orderId);

    List<BdmOrder> selectCloseOrder(@Param("timeOut")Long timeOut);

    int countChargeback(@Param("orderId") String orderId);

    List<BdmOrder> selectBdmorder(@Param("bdmOrderDto") BdmOrderDto bdmOrderDto);

    /**
     * 十五天自动收货
     */
    void takeDeliveryOfGoods(@Param("day") int day);

    List<String> getOrderByOrderStatus(@Param("day") int day);

    @Select("select ifnull((select receive_days from auto_receive_config where is_active = 1 order by weight asc limit 1), 15)as day")
    int getAutoReceiveConfig();

    List<UserOrderStatusCountVo> selectOrderStatusCount(@Param("userId") Long userId);

}
